#include "usart_bsp.h"
#include "stdio.h"

#if 1
#pragma import(__use_no_semihosting)
//标准库需要的支持函数
struct __FILE
{
int handle;
};
FILE __stdout;
//定义_sys_exit()以避免使用半主机模式
int _sys_exit(int x)
{
x = x;
}
//重定义fputc函数
int fputc(int ch, FILE *f)
{
while(USART_GetFlagStatus(USART1,USART_FLAG_TC)==RESET);
USART_SendData(USART1,(uint8_t)ch);
return ch;
}
#endif



void USART_BSP_Init(void)
{
	USART_InitTypeDef  USART_InitSturcture;
	GPIO_InitTypeDef GPIO_InitStructure;
	NVIC_InitTypeDef NVIC_InitStructure;
	
	#if USART1_EN == 1
	
	//配置GPIO PA9->TX    PA10->RX
	RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA,  ENABLE);
	RCC_APB2PeriphClockCmd( RCC_APB2Periph_USART1,  ENABLE);

	//复用引脚配置
	GPIO_PinAFConfig(GPIOA, GPIO_PinSource9, GPIO_AF_USART1);
	GPIO_PinAFConfig(GPIOA, GPIO_PinSource10,GPIO_AF_USART1);

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9|GPIO_Pin_10;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
	GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
	GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;
	GPIO_Init(GPIOA,&GPIO_InitStructure);
	//配置USART参数
	USART_InitSturcture.USART_BaudRate = USART1_BAUD;
	USART_InitSturcture.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
	USART_InitSturcture.USART_Mode = USART_Mode_Rx|USART_Mode_Tx;
	USART_InitSturcture.USART_Parity = USART_Parity_No;
	USART_InitSturcture.USART_StopBits = USART_StopBits_1;
	USART_InitSturcture.USART_WordLength = USART_WordLength_8b;
	USART_Init(USART1,  &USART_InitSturcture);
	//配置中断

	NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 0;
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;

	USART_ITConfig(USART1,  USART_IT_RXNE|USART_IT_TXE,  ENABLE);
	USART_Cmd(USART1,  ENABLE);
	
	#endif
}